
//通过class选择元素.

function getByClass (aParent,aClass)
{
  var aParent = aParent || document;
  var object = aParent.getElementsByTagName('*');
  var aBasket = [];
  var re = new RegExp('\\b'+aClass+'\\b');
  for(var i=0; i<object.length;i++) 
  {
     if(re.test(object[i].className))
     {
       aBasket.push(object[i]);
     }
  }
  return aBasket;
}

//获取计算后的样式(非行间样式)

function getStyle(obj,attr)
{
  if(obj.currentStyle)
  {
     return obj.currentStyle[attr];
  }
  else
  {
     return getComputedStyle(obj,false)[attr];
  }
}

//运动框架
function startMove(obj,json,fn){
  //在开始前关闭先前打开的定时器，避免定时器叠加。
  clearInterval(obj.timer);
  //开启定时器
  obj.timer=setInterval(function(){
  //定义一个变量，用以检测是否所有值都到达了目标点("开关")
  var aStop = true;
  //循环json，取得其中的值 。 可理解为   attr 为样式属性，   json【attr】便是 样式的值
  for(var attr in json)
  { 
  //对透明度，处理。 判断样式是否为透明度，如果是截取浮点数，在转换为整数，避免小数问题【程序原则，在一个程序中尽量避免小数，不然程序容易出问题】否则，截取整数即可。
  var  countStyle = attr=='opacity'?parseInt(parseFloat(getStyle(obj,attr))*100):parseInt(getStyle(obj,attr));
  //缓冲运动计算速度
  var iSpeed = (json[attr]-countStyle)/16;
  //对速度进行取整，以保证能够正常达到目标点
 iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed);
  //判断--》如果有任意一个值没有到达目标点，返回false，阻止程序关闭定时器。
  if(countStyle!=json[attr])aStop = false;
 //判断样式是否为透明度，如果是执行设置透明度，否则设置普通值。
     if(attr == 'opacity')
     {
       obj.style.filter= 'alpha(opacity:'+(countStyle+iSpeed)+')';
       obj.style.opacity = (countStyle+iSpeed)/100;
     }
     else
     {
       obj.style[attr] = countStyle+iSpeed +'px';
     }
  //循环结束
  }
  //检测停止，
  if(aStop)
  {
     clearInterval(obj.timer);
     if(fn)
     {
        fn();
     }
   }
  
  //定时器结束
  },30)
  //框架结束 
}